*/
#include "gtkalignment.h"
+#include "gtkbutton.h"
#include "gtkcellrendererpixbuf.h"
#include "gtkcellrendererseptext.h"
#include "gtkcellrenderertext.h"
+#include "gtkcombobox.h"
#include "gtkentry.h"
#include "gtkfilechooserdefault.h"
#include "gtkfilechooserentry.h"
#include "gtkimage.h"
#include "gtklabel.h"
#include "gtkmenuitem.h"
-#undef GTK_DISABLE_DEPRECATED
-#include "gtkoptionmenu.h"
-#define GTK_DISABLE_DEPRECATED
#include "gtkprivate.h"
#include "gtkscrolledwindow.h"
#include "gtkstock.h"
GtkWidget *preview_frame;
GtkWidget *filter_alignment;
- GtkWidget *filter_option_menu;
+ GtkWidget *filter_combo;
GtkWidget *tree_scrollwin;
GtkWidget *tree;
GtkWidget *shortcuts_scrollwin;
GtkFileFilter *filter);
static void check_preview_change (GtkFileChooserDefault *impl);
-static void filter_option_menu_changed (GtkOptionMenu *option_menu,
+static void filter_combo_changed (GtkComboBox *combo_box,
GtkFileChooserDefault *impl);
static void tree_selection_changed (GtkTreeSelection *tree_selection,
GtkFileChooserDefault *impl);
gtk_tree_view_set_model (GTK_TREE_VIEW (impl->shortcuts_tree), GTK_TREE_MODEL (impl->shortcuts_model));
}
-/* Creates the widgets for the filter option menu */
+/* Creates the widgets for the filter combo box */
static GtkWidget *
create_filter (GtkFileChooserDefault *impl)
{
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
gtk_widget_show (label);
- impl->filter_option_menu = gtk_option_menu_new ();
- gtk_option_menu_set_menu (GTK_OPTION_MENU (impl->filter_option_menu),
- gtk_menu_new ());
- gtk_box_pack_start (GTK_BOX (hbox), impl->filter_option_menu, FALSE, FALSE, 0);
- gtk_widget_show (impl->filter_option_menu);
+ impl->filter_combo = gtk_combo_box_new_text ();
+ gtk_box_pack_start (GTK_BOX (hbox), impl->filter_combo, FALSE, FALSE, 0);
+ gtk_widget_show (impl->filter_combo);
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), impl->filter_option_menu);
+ gtk_label_set_mnemonic_widget (GTK_LABEL (label), impl->filter_combo);
- g_signal_connect (impl->filter_option_menu, "changed",
- G_CALLBACK (filter_option_menu_changed), impl);
+ g_signal_connect (impl->filter_combo, "changed",
+ G_CALLBACK (filter_combo_changed), impl);
return impl->filter_alignment;
}
/* We override show-all since we have internal widgets that
* shouldn't be shown when you call show_all(), like the filter
- * option menu.
+ * combo box.
*/
static void
gtk_file_chooser_default_show_all (GtkWidget *widget)
return impl->file_system;
}
-static GtkWidget *
-find_filter_menu_item (GtkFileChooserDefault *impl,
- GtkFileFilter *filter,
- gint *index_return)
-{
- GtkWidget *menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (impl->filter_option_menu));
- GList *children = gtk_container_get_children (GTK_CONTAINER (menu));
- GList *tmp_list;
- int index = 0;
-
- if (index_return)
- *index_return = -1;
-
- for (tmp_list = children; tmp_list; tmp_list = tmp_list->next)
- {
- if (g_object_get_data (tmp_list->data, "gtk-file-filter") == filter)
- {
- if (index_return)
- *index_return = index;
- return tmp_list->data;
- }
- index++;
- }
-
- g_list_free (children);
-
- return NULL;
-}
-
static void
gtk_file_chooser_default_add_filter (GtkFileChooser *chooser,
GtkFileFilter *filter)
{
GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (chooser);
- GtkWidget *menu;
- GtkWidget *menu_item;
const gchar *name;
if (g_slist_find (impl->filters, filter))
if (!name)
name = "Untitled filter"; /* Place-holder, doesn't need to be marked for translation */
- menu_item = gtk_menu_item_new_with_label (name);
- g_object_set_data (G_OBJECT (menu_item), "gtk-file-filter", filter);
- gtk_widget_show (menu_item);
-
- menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (impl->filter_option_menu));
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
- /* Option menus don't react to menu size changes properly */
- gtk_widget_size_request (menu, NULL);
+ gtk_combo_box_append_text (GTK_COMBO_BOX (impl->filter_combo), name);
if (!g_slist_find (impl->filters, impl->current_filter))
set_current_filter (impl, filter);
GtkFileFilter *filter)
{
GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (chooser);
- GtkWidget *menu;
- GtkWidget *menu_item;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gint filter_index;
+
+ filter_index = g_slist_index (impl->filters, filter);
- if (!g_slist_find (impl->filters, filter))
+ if (index < 0)
{
g_warning ("gtk_file_chooser_remove_filter() called on filter not in list\n");
return;
set_current_filter (impl, NULL);
}
- menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (impl->filter_option_menu));
- menu_item = find_filter_menu_item (impl, filter, NULL);
- g_assert (menu_item);
- gtk_widget_destroy (menu_item);
- /* Option menus don't react to menu size changes properly */
- gtk_widget_size_request (menu, NULL);
-
+ /* Remove row from the combo box */
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (impl->filter_combo));
+ gtk_tree_model_iter_nth_child (model, &iter, NULL, filter_index);
+ gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+
g_object_unref (filter);
if (!impl->filters)
{
if (impl->current_filter != filter)
{
- int menu_item_index;
+ int filter_index;
/* If we have filters, new filter must be one of them
*/
- find_filter_menu_item (impl, filter, &menu_item_index);
- if (impl->filters && menu_item_index < 0)
+ filter_index = g_slist_index (impl->filters, filter);
+ if (impl->filters && filter_index < 0)
return;
if (impl->current_filter)
}
if (impl->filters)
- gtk_option_menu_set_history (GTK_OPTION_MENU (impl->filter_option_menu),
- menu_item_index);
+ gtk_combo_box_set_active (GTK_COMBO_BOX (impl->filter_combo),
+ filter_index);
install_list_model_filter (impl);
}
static void
-filter_option_menu_changed (GtkOptionMenu *option_menu,
- GtkFileChooserDefault *impl)
+filter_combo_changed (GtkComboBox *combo_box,
+ GtkFileChooserDefault *impl)
{
- gint new_index = gtk_option_menu_get_history (GTK_OPTION_MENU (option_menu));
+ gint new_index = gtk_combo_box_get_active (combo_box);
GtkFileFilter *new_filter = g_slist_nth_data (impl->filters, new_index);
set_current_filter (impl, new_filter);